JSONDecoder
將抓下來的資訊透過JSONDecoder這個將收集到的資訊進行使用
下面做個簡單的示範:
// 假設今天有個struct名為Price
struct Price:Codable{
	var apple:Int
	var banana:Int
	var pineapple:Int
}
// 本地端建立一個json檔
let json = """ 
	{
		"apple":10,
		"banana":20,
		"pineapple":30
	}
""".data(using: .utf8)!
// 建立一個JSONDecoder實例
let decoder = JSONDecoder()
// 透過解析json檔,將資料儲存在自定義的struct中
let price = try decoder.decode(Product.self,from:json)
// 印出10
print(price.apple)
需要注意JSON裡面是{}還是[]
使用[]符號的是Array
使用{}符號的是物件
這兩種在結構上存在差異:
struct decodeAll:Codable{
	// 代表裡面是[]陣列,還有東西在裡面
	let basket:[Ball]
	// 代表是物件,直接使用裡面的名字即可
	let basketball:String
}
// []陣列裡面的key-value搭配
struct Ball:Codable{
	let Ballname:String
}
另外有個例子:
"Basket":["BasketBall"]
使用JSONEditorOnline看到的會是
Basket[1]
[0:"BasketBall"]
這樣要怎麼解決,通常會使用key值作為decode媒介,但是這個沒有key
這邊會使用
struct decodeBasket:Codable{
	let Basket:[String]
}
直接將裡面的物件,用所屬的屬性decode
應用上會先使用URLSession進行網路連結
let url = URL(string:"http:.....")
let session = URLSession.shared
// 
let task = session.dataTask(with:URLRequest(url:url!)){(data,res,error) in 
	// 會回傳(data,res,error)資料,下面的函式都是基於這三個回傳資料進行
	
	if error != nil{
		print(error!)
		return
	}
	let decoder = JSONDecoder()
	// 使用DecumentData作為decode的結構,這邊省略寫下DocumentData的詳細結構
	guard document = try decoder.decode(DocumentData.self,from:data!)else{
		print("ERROR")
		return
		}
}
task.resume()